package com.gxa.learning.core.service;

import com.github.pagehelper.PageInfo;
import com.gxa.learning.core.exception.BusinessException;

import java.io.Serializable;
import java.util.List;

/**
 * @author YXQ
 * @date 2021/11/10 10:38
 */
public interface BaseService<T> {
    /**
     * 根据id查询目标类型的方法
     *
     * @param id 标识列,为了通用采用Serializable类型(采用Integer/Long等)
     * @return 泛型擦除后的类型的对象
     */
    T selectById(Serializable id);

    /**
     * 一个通用的分页查询的方法
     *
     * @param page 页数
     * @param size 每页记录数
     * @param t    可变参数,用于记录查询条件
     * @return pageInfo
     * @throws IllegalAccessException 异常
     */
    PageInfo<T> selectByPage(Integer page, Integer size, T... t) throws IllegalAccessException;

    /**
     * 根据条件查询
     *
     * @param t 条件
     * @return 返回查询到的集合
     * @throws IllegalAccessException
     */
    PageInfo<T> selectByPageEquals(Integer page, Integer size, T t) throws IllegalAccessException;

    /**
     * 根据t所带特征精确查询
     *
     * @param t 对象
     * @return 对象数组
     */
    List<T> select(T t);

    /**
     * 全查询的方法
     *
     * @return 对象数组
     */
    List<T> selectAll();

    /**
     * 根据id修改特征值
     *
     * @param t 对象
     * @return 影响得行数
     */
    Integer updateById(T t);

    /**
     * 根据id值删除
     *
     * @param id id
     * @return 影响得行数
     */
    Integer deleteById(Serializable id);

    /**
     * 根据多个id批量删除
     *
     * @param ids 一个或多个
     * @return 返回是否成功
     * @throws BusinessException 操作中产生的异常
     */
    Boolean batchDel(List<Long> ids) throws BusinessException;

    /**
     * 添加方法
     *
     * @param t 对象
     * @return 返回对象, id自增时.tk会将id值付给t
     */
    T insert(T t);

}
